
extern "C" {

	/* Wrapper for RPTree */
	void *RPTree_new( double *data,
			  unsigned int rows,
			  unsigned int columns,
			  unsigned int min_size,
			  unsigned int maxdepth,
			  double c,
			  unsigned int *leavesContent );

	void *RPTree_load( const char *file );
	void RPTree_save( void *rptree, const char *file );
	void RPTree_print( void *rptree );
	void RPTree_delete( void *rptree );
	unsigned int RPTree_use( void *rptree, double *data );
	void RPTree_multi_use( void *rptree, double *data, unsigned int rows, unsigned int *result );

	void   RPTree_get_v( void *rptree, double *v );
	void   *RPTree_get_left( void *rptree );
	void   *RPTree_get_right( void *rptree );
	int    RPTree_get_usedRule( void *rptree );
	double RPTree_get_threshold( void *rptree );
	double RPTree_get_mean( void *rptree );
	unsigned int RPTree_get_dim( void *rptree );
	unsigned int RPTree_get_depth( void *rptree );
	void *RPTree_get_leaf_by_id( void *rptree, unsigned int id );
	bool RPTRee_isLeaf(void* rptree);
	
	/* wrapper for RPLeaf */
	void *RPLeaf_new( unsigned int depth, unsigned int id );
	unsigned int RPLeaf_use( void *rpleaf, double *data );
	void RPLeaf_delete( void *rpleaf );
	unsigned int RPLeaf_get_id( void *rpleaf );
	unsigned int RPLeaf_get_depth( void *rpleaf );
}

